// 内容脚本，用于检测文本选择

let selectedText = '';
let isProcessing = false;
let timeouts = new Set(); // 使用Set存储所有定时器ID

// 防抖函数，避免频繁触发
function debounce(func, wait) {
  let timeout;
  return function executedFunction(...args) {
    // 清除之前的定时器
    if (timeout) {
      clearTimeout(timeout);
      timeouts.delete(timeout);
    }
    
    // 设置新的定时器
    timeout = setTimeout(() => {
      func(...args);
      timeouts.delete(timeout);
    }, wait);
    
    // 将新的定时器添加到集合中
    timeouts.add(timeout);
  };
}

// 处理文本选择事件
const handleTextSelection = debounce(async () => {
  if (isProcessing) return;
  
  try {
    const selection = window.getSelection();
    if (selection && selection.toString().trim()) {
      const newText = selection.toString().trim();
      
      // 只有当文本发生变化时才发送消息
      if (newText !== selectedText) {
        selectedText = newText;
        isProcessing = true;
        
        // 发送选中的文本到后台脚本
        try {
          await chrome.runtime.sendMessage({
            action: 'textSelected',
            text: selectedText,
            url: window.location.href
          });
        } catch (e) {
          console.error('发送消息失败:', e);
        } finally {
          isProcessing = false;
        }
      } else {
        isProcessing = false;
      }
    } else {
      isProcessing = false;
    }
  } catch (error) {
    console.error('处理文本选择时出错:', error);
    isProcessing = false;
  }
}, 300); // 300ms防抖延迟

// 清理所有定时器
function clearAllTimeouts() {
  timeouts.forEach(timeoutId => clearTimeout(timeoutId));
  timeouts.clear();
}

// 移除事件监听器
function removeEventListeners() {
  document.removeEventListener('mouseup', handleTextSelection);
  document.removeEventListener('keyup', handleTextSelection);
}

// 添加事件监听器
document.addEventListener('mouseup', handleTextSelection);
document.addEventListener('keyup', handleTextSelection);

// 监听来自扩展的请求
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
  if (request?.action === 'getSelectedText') {
    try {
      const selection = window.getSelection();
      const text = (selection && selection.toString().trim()) ? selection.toString().trim() : selectedText;
      sendResponse({text: text});
    } catch (error) {
      console.error('获取选中文本时出错:', error);
      sendResponse({text: selectedText || ''});
    }
  }
  
  // 保持消息通道开放以进行异步响应
  return true;
});

// 监听页面卸载事件
window.addEventListener('beforeunload', () => {
  // 清理资源
  removeEventListeners();
  clearAllTimeouts();
});

window.addEventListener('pagehide', () => {
  // 清理资源
  removeEventListeners();
  clearAllTimeouts();
});

// 监听页面可见性变化
document.addEventListener('visibilitychange', () => {
  if (document.hidden) {
    // 页面隐藏时，可以考虑暂停一些操作
    // 但保留事件监听器，因为用户可能很快返回页面
  }
});